/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ants;

import java.util.LinkedList;
import java.util.ListIterator;

/**
 *
 * @author Plokasu
 */
public class Batallav2 {
    
    void pelear(Mapa m, int turno){
        LinkedList ants;
        int i,j,bandos,k,l,w, hor1, hor2, x = 0;
        ListIterator[] itrp = new ListIterator[Constantes.max_players];
        LinkedList[] J = new LinkedList[Constantes.max_players];
        //Por cada celda
        for(j=1;j<m.h+1;j++){
            for(i=1;i<m.w+1;i++){
                for(w=0;w<Constantes.max_players;w++){
                   J[w] = new LinkedList();
                }
                bandos = 0;
                //Sacamos la lista de hormigas
                ants = m.cells[i][j].ants;    
                //Si no esta vacia la lista y hay más de 1 hormiga
                if(!ants.isEmpty()||ants.size()>1){
                    //Metemos a las hormigas en las listas de jugadores
                   itrp[0] = ants.listIterator();
                   
                       while (itrp[0].hasNext()) {
                            Ant hormi = (Ant) itrp[0].next();
                            x = (hormi.jugador-turno)%Constantes.max_players;
                            if (x<0) {
                                x = x+Constantes.max_players;
                            }
                            J[x].add(hormi);
                        }//While has next
                         //Checamos cuantos bandos existen en el espacio
                        for(k=0;k<Constantes.max_players;k++){
                            if(!J[k].isEmpty()){
                                bandos++;
                            }
                        }
                        if(bandos>1){
                            int q;
                            Ant ha;//Hormiga actual
                            Ant he;//Hormiga enemiga
                            //K es el iterador de jugadores
                            for(k=0;k<Constantes.max_players;k++){
                                //Iniciamos los iteradores
                                for(l=0;l<Constantes.max_players;l++){
                                    itrp[l] = J[l].listIterator();
                                }
                                //Checamos si cada jugador, con cada hormiga puede atacar y dañar a una del siguiente jugador,
                                //Y sino, intenta con el siguiente y asi se sigue.
                                //System.out.println("Las hormigas de "+k+" atacan");
                                hor1 = 0;
                                while(itrp[k].hasNext()){
                                    //Checamos con cada hormiga
                                    ha = (Ant) itrp[k].next();
                                    he = null;
                                    if(ha.hp>0&&ha.type!=Constantes.explorer_id){//La hormiga esta viva? No es exploradora?
                                        for(l=1;l<Constantes.max_players;l++){
                                            //Aplicando esto, sacamos el numero de jugador, relativo al jugador al que le toca.
                                            q = (k+l)%Constantes.max_players;
                                            if(he==null){//Si todavia no se tiene una hormiga a la que atacar
                                                hor2 = 0;
                                                if(!J[q].isEmpty()){//Si J[q] No esta vacio
                                                    //Itera para encontrar una hormiga...
                                                    itrp[q] = J[q].listIterator();
                                                    while(itrp[q].hasNext()){
                                                       if(he==null){//Si he es null, no se ha escogido una hormiga enemiga
                                                           
                                                            he = (Ant) itrp[q].next(); //Se asigna una hormiga...
                                                            if(he.hp>0&&he.recibiraDano(ha.atk)){
                                                                //System.out.println("Esta hormiga si recibe dano de la hormiga "+hor1);
                                                                //Si la vida de he es >0 y le hara daño 
                                                                //entonces se puede elegir y llisto
                                                                break;
                                                            }else{
                                                                if(he.hp<0){
                                                                }else{
                                                                }
                                                                //Si esta muerta o no recibira daño, entonces se busca otra
                                                                he = null;
                                                            }
                                                        }//he ==null
                                                       hor2++;
                                                    }//While itrp[q] hasnext
                                                    
                                                }//J[q] esta vacio
                                            }else{//If he==null
                                                //Esto pasa cuando ya se selecciono una hormiga (Es la interacion de jugadores)
                                                break;
                                            }
                                        }//l=1 y l<maxplayers
                                        //Si no es null, esta hormiga encontro a alguien a quien atacar, y procede a hacerlo...
                                        if(he!=null){
                                            //Ya checo todo, ahora la ataca
                                            he.danar(ha.atk);
                                            //System.out.println("HP:"+he.hp);
                                        }//Si he != null                                
                                    }//Esta viva? No es exploradora?
                                    hor1++;
                                }//While itrp[k] hasnext
                            }//for k<constantesmaxplayers
                        }//Bandos>1
                }//La lista esta vacia o solo hay una hormiga
                //Pasa a la siguiente celda...
            }//FOr i
        }//For j
    }//void pelea
}//Public class
